1.3.1 Paint 设置
Paint 与文字相关的设置方法有如下几个:
- 普通设置
|
|
- 样式设置
|
|
- 其他设置
|
|
1. 填充样式的区别
paint.setStyle() 函数对文字和几何图形都有效。下面就来看看不同的填充样式对文字的影响:
效果图如下:
2. setTextAlign() 函数
|
|
用于设置所要绘制的字符串与起始点的相对位置。参数 Align align 的取值如下:
- Align.LEFT:居左绘制,即通过 drawText() 函数指定的起始点在最左侧,文字从起始点位置开始绘制。
- Align.CENTER:居中绘制,即通过 drawText() 函数指定的起始点在文字中间位置。
- Align.RIGHT:居右绘制,即通过 drawText() 函数指定的起始点在文字右侧位置。
示例:
从效果图中可以看出,当居左对齐 (Align.LEFT) 时,整个字符串都在起始点 (400,100) 的右侧,也就是说,通过 drawText() 函数指定的起始点 (400,100) 是居左的。同样,当居右对齐 (Align.RIGHT) 时,起始点也是居右的,也就是说,所有文字都在起始点 (400,100) 的左侧。
3. 设置字体样式
1)常规设置
示例
2)字体倾斜度设置
该函数用于设置字体倾斜度。参数 float skewX 的默认值是 0,取负值时文字向右倾斜,取正值时文字向左倾斜,Word 文档中倾斜字体的倾斜度是 -0.25f。
示例:
4. 水平拉伸
|
|
该函数用于在水平方向拉伸文字。参数 float scaleX 表示拉伸倍数,当取值为 1 时,表示不拉伸。默认为不拉伸。
示例:
1.3.2 Canvas 绘制文本
1. 普通绘制
|
|
参数:
int start:表示起始绘制字符所在字符串中的索引。
int end:表示结束绘制字符所在字符串中的索引。
int index:指定起始绘制字符的位置。
int count:指定从起始绘制字符开始绘制几个字符。
示例:
2. 逐个指定文字位置
|
|
参数:
- char[] text/String text:要绘制的字符串。
- int index:第一个要绘制的文字的索引。
- int count:要绘制的文字的个数,用来计算最后一个文字的位置,从第一个绘制的文字开始算起。
- float[] pos:要绘制的每个文字的具体位置,同样两两一组,如 {x1,y1,x2,y2,x3,y3,…}。
示例:
3. 沿路径绘制
|
|
- float hOffset:与路径起始点的水平偏移量。
- float vOffset:与路径中心的垂直偏移量。
示例:
1.3.3 设置字体样式
在 Paint 中有一个函数是专门用来设置字体样式的。
Typeface 是专门用来设置字体样式的类,通过 paint.setTypeface() 函数来指定即将绘制的文字的字体样式。可以指定系统中的字体样式,也可以在自定义的样式文件中获取。在构建 Typeface 类时,可以指定所用样式的正常体、斜体、粗体等。如果在指定样式中没有相关文字的样式,就会用系统默认的样式来显示,一般默认是宋体。
1. 使用系统中的字体样式
1)使用 Android 自带的字体样式
在 Typeface 类中保存着三种自带的字体样式:Typeface.SANS_SERIF、Typeface.MONOSPACE 和 Typeface.SERIF。
示例:
由于这三种字体样式对中文的支持不是很好。所以,当遇到不支持的文字时,会使用系统默认的样式来写。对中国用户而言,系统默认的字体一般是 DroidSansFallback,所以用这三种样式的文字写中文时是看不到差别的,我们一般不会使用这三种字体样式。
2)defaultFromStyle() 函数
该函数会根据字体样式获取对应的默认字体。参数 int style 的取值如下:
- Typeface.NORMAL:正常字体。
- Typeface.BOLD:粗体。
- Typeface.ITALIC:斜体。
- Typeface.BOLD_ITALIC:粗斜体。
如果系统默认的字体是宋体,那么当指定 defaultFromStyle(Typeface.BOLD_ITALIC) 时,获取的将是粗斜体的宋体样式。
示例:
3)create(String familyName, int style) 函数
该函数直接通过指定字体名来加载系统中自带的字体样式。如果字体样式不存在,则会用系统样式替代并返回。
示例:
2. 自定义字体样式
一般而言,我们不会指定系统自带的字体样式。因为除 Android 自带的三种字体样式以外,其他字体样式并不一定在每款手机上都有预装。所以,我们一般会选择加载自定义的字体文件来绘制文字,这样才不至于在每款手机上的表现不一样。
如果要自定义字体样式,就需要从外部字体文件中加载我们所需的字形,这时所使用的 Typeface 构造函数有如下三个:
示例:
加载 res/font/xian.ttf 字体文件方式:
Typeface typeface = ResourcesCompat.getFont(context, R.font.xian);